<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
// +----------------------------------------------------------------------
namespace Addons\Attachment\Model;

use Think\Model;

/**
 * 分类模型
 */
class AttachmentModel extends Model {
	/**
	 * 附件模型自动完成
	 * 
	 * @var array
	 */
	protected $_auto = array (
			array (
					'uid',
					'session',
					self::MODEL_INSERT,
					'function',
					'user_auth.uid' 
			),
			array (
					'download',
					0,
					self::MODEL_INSERT 
			),
			array (
					'sort',
					0,
					self::MODEL_INSERT 
			),
			array (
					'create_time',
					NOW_TIME,
					self::MODEL_INSERT 
			),
			array (
					'update_time',
					NOW_TIME,
					self::MODEL_BOTH 
			),
			array (
					'status',
					1,
					self::MODEL_BOTH 
			) 
	);
	protected function _after_find(&$result, $options) {
		$result ['update_time_text'] = date ( 'Y-m-d H:i:s', $result ['update_time'] );
		$result ['document_title'] = D ( 'Document' )->getFieldById ( $result ['record_id'], 'title' );
		$result ['size'] = format_bytes ( $result ['size'] );
	}
	protected function _after_select(&$result, $options) {
		foreach ( $result as &$record ) {
			$this->_after_find ( $record, $options );
		}
	}
	
	/**
	 * 保存文件附件到数据库
	 * 
	 * @param string $title
	 *        	附件标题
	 * @param array $file
	 *        	文件数据
	 * @param number $record
	 *        	关联记录ID
	 * @param integer $dir
	 *        	是否为目录
	 * @return boolean
	 */
	public function saveFile($title, $file, $record, $dir = 0) {
		$data = array (
				'title' => $title,
				'type' => 2,
				'source' => $file ['id'],
				'record_id' => $record,
				'dir' => $dir,
				'size' => $file ['size'] 
		);
		
		/* 保存附件 */
		if ($this->create ( $data ) && $this->add ()) {
			return true;
		} else {
			return false;
		}
	}
	public function saveDir() {
	}
	
	/**
	 * 下载附件
	 * 
	 * @param number $id
	 *        	附件ID
	 * @return boolean 下载失败返回false
	 */
	public function download($id) {
		$info = $this->field ( true )->find ( $id );
		if ($info && $info ['status'] == 1) {
			/* 下载附件 */
			$this->downloadId = $id;
			switch ($info ['type']) {
				case 0 :
					// TODO: 下载目录？
					break;
				case 1 :
					// TODO: 下载外部附件
					break;
				case 2 :
					$File = D ( 'File' );
					$root = C ( 'ATTACHMENT_UPLOAD.rootPath' );
					$call = array (
							$this,
							'setDownload' 
					);
					if (false === $File->download ( $root, $info ['source'], $call, $id )) {
						$this->error = $File->getError ();
					}
					break;
				default :
					$this->error = '无效附件类型！';
			}
		} else {
			$this->error = '附件已删除或被禁用！';
		}
		return false;
	}
	
	/**
	 * 新增下载次数（File模型回调方法）
	 */
	public function setDownload($id) {
		$map = array (
				'id' => $id 
		);
		$this->where ( $map )->setInc ( 'download' );
	}
}